Проблемы с разделением JFrame и JPanel? - PullRequest
1 голос
/ 29 сентября 2011

Не могу сказать, если я просто не понимаю, что это за две вещи, но из того, что я собрал, 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) 
{


}
}

1 Ответ

2 голосов
/ 29 сентября 2011

На первый взгляд, у вас автоматически появляется JFrame, как только вы расширяете JFrame.Доска - это JFrame и рамка не нужна.Изучите учебник , особенно раздел 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);
       ...

Вот обобщенный подход JSplitPane, свежий из NetBeans:

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) на 1/3 ширины вашего JFrame.JSplitPane1.setEnabled (false) делает разделение фиксированным.

...