JFrame 和 JPanel 分离有问题吗?
我不知道如果我只是不明白这两件事是什么,但从我收集到的信息来看,JFrame 只是一个打开的大盒子,所以我想做的是让那个打开的大盒子显示为红色,然后之后我正在制作一个 JPanel,我认为它是位于 JFRAME 顶部的东西,我试图将其变为灰色,那么我怎样才能获得一个红色框架,左侧有一条灰色条带。我还尝试将这些按钮沿着灰色 JPanel 垂直放置,如果可能的话,将它们全部拉伸到 JPanel 的宽度。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Board extends JFrame implements MouseListener,ActionListener
{
public int x1, y1, x2, y2;
public Board()
{
JFrame frame = new JFrame();
frame.setSize(1200, 800);
Container con = frame.getContentPane();
con.setBackground(Color.RED);
addMouseListener(this);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton clear = new JButton("Clear");
clear.addActionListener(this);
JButton emptyR = new JButton("Empty Rectangle");
emptyR.addActionListener(this);
JPanel menu = new JPanel();
menu.setSize(200, 500);
BoxLayout layout = new BoxLayout(menu, BoxLayout.Y_AXIS);
menu.setLayout(layout);
menu.add(clear);
menu.add(emptyR);
//menu.setBackground(Color.black);
frame.add(menu);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu help = new JMenu("Help");
menuBar.add(help);
JMenuItem about = new JMenuItem("About");
help.add(about);
about.addActionListener(this);
}
public void mouseExited(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mousePressed(MouseEvent evt)
{
x1 = evt.getX();
y1= evt.getY();
}
public void mouseReleased(MouseEvent evt)
{
x2 =evt.getX();
y2=evt.getY();
}
public void actionPerformed(ActionEvent e)
{
}
}
I cant tell If I'm just not getting what these 2 things are but from what I gathered, the JFrame is just a big open box, So what I am trying to do is have that big box that opens will be say Red, then after that I'm making a JPanel which I assume is something that sits on top of the JFRAME, I'm trying to get this to be GRAY, So How can I get a red frame, with a gray strip on the left. I'm also trying to put these buttons vertically along the gray JPanel, and if at all possible them all to be stretched to the width of the JPanel.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class Board extends JFrame implements MouseListener,ActionListener
{
public int x1, y1, x2, y2;
public Board()
{
JFrame frame = new JFrame();
frame.setSize(1200, 800);
Container con = frame.getContentPane();
con.setBackground(Color.RED);
addMouseListener(this);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton clear = new JButton("Clear");
clear.addActionListener(this);
JButton emptyR = new JButton("Empty Rectangle");
emptyR.addActionListener(this);
JPanel menu = new JPanel();
menu.setSize(200, 500);
BoxLayout layout = new BoxLayout(menu, BoxLayout.Y_AXIS);
menu.setLayout(layout);
menu.add(clear);
menu.add(emptyR);
//menu.setBackground(Color.black);
frame.add(menu);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu help = new JMenu("Help");
menuBar.add(help);
JMenuItem about = new JMenuItem("About");
help.add(about);
about.addActionListener(this);
}
public void mouseExited(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
public void mousePressed(MouseEvent evt)
{
x1 = evt.getX();
y1= evt.getY();
}
public void mouseReleased(MouseEvent evt)
{
x2 =evt.getX();
y2=evt.getY();
}
public void actionPerformed(ActionEvent e)
{
}
}
乍一看,一旦扩展 JFrame,您就自动拥有了一个 JFrame。 Board 是 JFrame,框架不是必需的。研究教程,特别是 Swing 部分。
应该是:
这是来自 NetBeans 的通用 JSplitPane 方法:
您应该将 setDividerLocation(n) 配置为 JFrame 宽度的 1/3。 jSplitPane1.setEnabled(false) 使分割固定。
On a first look, you have automatically a JFrame as soon as you extend JFrame. Board is a JFrame and frame is not necessary. Study the tutorial, especially the Swing section.
should rather be:
Here is a generic JSplitPane approach fresh from NetBeans:
You should configure the setDividerLocation(n) to be 1/3 of your JFrame width. The jSplitPane1.setEnabled(false) makes the division fixed.