gpt4 book ai didi

java - JFrame 和 JPanel 分离有问题吗?

转载 作者:行者123 更新时间:2023-11-30 04:58:53 25 4
gpt4 key购买 nike

我无法判断,如果我只是不明白这两件事是什么,但从我收集到的信息来看,JFrame 只是一个打开的大盒子,所以我想做的是让那个打开的大盒子说红色,然后我正在制作一个 JPanel,我认为它是位于 JFRAME 顶部的东西,我试图将其变为灰色,那么我怎样才能获得一个红色框架,上面有一条灰色 strip 左边。我还尝试将这些按钮沿着灰色 JPanel 垂直放置,如果可能的话,将它们全部拉伸(stretch)到 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,框架不是必需的。研究tutorial ,尤其是 Swing 部分。

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);
...

应该是:

public class Board extends JFrame implements MouseListener,ActionListener {
public int x1, y1, x2, y2;

public Board() {
setSize(1200, 800);
Container con = getContentPane();
con.setBackground(Color.RED);
addMouseListener(this);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
...

这是来自 NetBeans 的通用 JSplitPane 方法:

public class NewJFrame1 extends javax.swing.JFrame {

/** Creates new form NewJFrame1 */
public NewJFrame1() {
initComponents();
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jSplitPane1 = new javax.swing.JSplitPane();
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jSplitPane1.setBorder(null);
jSplitPane1.setDividerLocation(100);
jSplitPane1.setDividerSize(1);
jSplitPane1.setEnabled(false);

jPanel1.setBackground(new java.awt.Color(153, 153, 153));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);

jSplitPane1.setLeftComponent(jPanel1);

jPanel2.setBackground(new java.awt.Color(255, 0, 0));

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 299, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);

jSplitPane1.setRightComponent(jPanel2);

getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);

pack();
}// </editor-fold>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new NewJFrame1().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JSplitPane jSplitPane1;
// End of variables declaration
}

您应该将 setDividerLocation(n) 配置为 JFrame 宽度的 1/3。 jSplitPane1.setEnabled(false) 使分割固定。

关于java - JFrame 和 JPanel 分离有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7594294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com