java文本区域出错

时间:2015-01-25 19:32:21

标签: java swing layout-manager null-layout-manager

我的JText区域无效。您将看到是否运行此代码。 textArea继续前往不同的地方,即使我已经设置了一个确定的位置。 textArea的代码是第57行。

我真正需要的是testArea保持固定位置,这在第57行中有解释。

注意:'pain'是包含textArea

的JPanel
public Graphics g;

public void paint(Graphics g) {

    Graphics2D projectFinder = (Graphics2D) g;
    projectFinder.setColor(Color.GRAY);
    projectFinder.fillRect(0, 0, 1000, 50);
    projectFinder.setStroke(new BasicStroke(100));

    Graphics2D OutPut = (Graphics2D) g;
    OutPut.setColor(Color.LIGHT_GRAY);
    OutPut.fillRect(553, 60, 535, 670);
    OutPut.drawString("Project Input (Your Code)", 30, 90);

    Graphics2D console = (Graphics2D) g;
    console.setColor(Color.WHITE);
    console.fillRect(563, 620, 515, 100);

    console.setColor(Color.BLACK);
    console.drawString("Console.ChemLOG", 570, 640);

}

public static void main(String[] args) {

    JPanel pnlButton = new JPanel();
    pnlButton.setBounds(800, 100, 100, 100);

    JButton button = new JButton("Add Project");
    button.setBounds(1000, 0, 100, 50);

    JFrame frame = new JFrame("GenoTECH IDE 1.0.0");
    frame.add(new MainScreen());
    frame.setSize(1100, 800);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(button);
    button.addActionListener(new NewProject());

    // TextBox

    JPanel pain = new JPanel();
    JTextArea area = new JTextArea();
    area.setSize(535, 670);
    area.setLocation(0, 0);

    pain.setLocation(10, 60);
    pain.setSize(area.getSize());

    pain.add(area);

    frame.add(pain);
}

// add project button
static class NewProject implements ActionListener {
    public void actionPerformed(ActionEvent e) {

        JButton buttonOK = new JButton("Ok");
        buttonOK.setBounds(0, 233, 150, 45);

        JButton buttonCn = new JButton("Cancel");
        buttonCn.setBounds(150, 233, 150, 45);

        JFrame frame2 = new JFrame("New Project");
        frame2.setSize(300, 300);
        frame2.setVisible(true);
        frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame2.add(buttonOK);
        frame2.add(buttonCn);
        buttonCn.addActionListener(new buttonCN());

    }

    static class buttonCN implements ActionListener {
        public void actionPerformed(ActionEvent e) {

            System.exit(0);

        }
    }
}

}

现在好了,对于代码的更新,我已经让JTextArea工作而不会搞砸,但是2D图形由于某种原因没有被调用。我还在使用一些Java布局格式进行另一种布局。

新守则:

private static final long serialVersionUID = 1L;
public Graphics g;

public void paint(Graphics g) {

    Graphics2D projectFinder = (Graphics2D) g;
    projectFinder.setColor(Color.GRAY);
    projectFinder.fillRect(0, 0, 1000, 50);
    projectFinder.setStroke(new BasicStroke(100));

    Graphics2D OutPut = (Graphics2D) g;
    OutPut.setColor(Color.LIGHT_GRAY);
    OutPut.fillRect(553, 60, 535, 670);
    OutPut.drawString("Project Input (Your Code)", 30, 90);

    Graphics2D console = (Graphics2D) g;
    console.setColor(Color.WHITE);
    console.fillRect(563, 620, 515, 100);

    console.setColor(Color.BLACK);
    console.drawString("Console.ChemLOG", 570, 640);

}

public static void main(String[] args) {        
    JButton button = new JButton("Add Project");
    button.setBounds(1000, 0, 100, 50);
    //button.setSize(5,5);
    //button.setLocation(1,1);

    JFrame frame = new JFrame("GenoTECH IDE 1.0.0");
    frame.setLayout(null);
    frame.add(new MainScreen());
    frame.setSize(1100, 800);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(button);
    button.addActionListener(new NewProject());

    // Thing to Change
    JTextArea area = new JTextArea();
    area.setSize(535, 670);
    area.setLocation(10, 60);

    frame.add(area);
}


// add project button
static class NewProject implements ActionListener {
    public void actionPerformed(ActionEvent e) {

        JButton buttonOK = new JButton("Ok");
        buttonOK.setBounds(0, 233, 150, 45);

        JButton buttonCn = new JButton("Cancel");
        buttonCn.setBounds(150, 233, 150, 45);

        JFrame frame2 = new JFrame("New Project");
        frame2.setSize(300, 300);
        frame2.setVisible(true);
        frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame2.add(buttonOK);
        frame2.add(buttonCn);
    }
}

1 个答案:

答案 0 :(得分:2)

我不确定你要做什么。这是使用Swing布局的代码的可运行版本。

以下是我所做的更改。

  1. 我通过调用SwingUtilities invokeLater方法启动了应用程序。这可确保在Event Dispatch thread (EDT)上创建和修改Swing组件。

  2. 执行JFrame方法的顺序非常重要。我修改了订单。

  3. 使用paintComponent方法在JPanel上绘图。您必须在绘图代码之前调用super。

  4. 您只能设置绘图面板的大小。您可以使用JFrame pack方法调整其余Swing组件的大小。

  5. 正如其他人所说,您使用Swing layouts来布局Swing组件。

  6. package com.ggl.testing;
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
    
    public class GenoTech implements Runnable {
    
        @Override
        public void run() {
            JFrame frame = new JFrame("GenoTECH IDE 1.0.0");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
    
            mainPanel.add(new DrawingPanel());
    
            JPanel pnlButton = new JPanel();
    
            JButton button = new JButton("Add Project");
            button.addActionListener(new NewProjectActionListener());
            pnlButton.add(button);
    
            mainPanel.add(pnlButton);
    
            JPanel pain = new JPanel();
            JTextArea area = new JTextArea();
            pain.add(area);
    
            mainPanel.add(pain);
    
            frame.add(mainPanel);
    
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new GenoTech());
        }
    
        public class DrawingPanel extends JPanel {
    
            private static final long serialVersionUID = -5718559965267054844L;
    
            public DrawingPanel() {
                this.setPreferredSize(new Dimension(700, 300));
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
    
                Graphics2D g2d = (Graphics2D) g;
                g2d.setColor(Color.GRAY);
                g2d.fillRect(0, 0, 700, 50);
                g2d.setStroke(new BasicStroke(100));
    
                g2d.setColor(Color.LIGHT_GRAY);
                g2d.fillRect(553, 60, 535, 300);
                g2d.drawString("Project Input (Your Code)", 30, 90);
    
                g2d.setColor(Color.WHITE);
                g2d.fillRect(563, 620, 515, 100);
    
                g2d.setColor(Color.BLACK);
                g2d.drawString("Console.ChemLOG", 570, 640);
            }
    
        }
    
        // add project button
        public class NewProjectActionListener implements ActionListener {
    
            @Override
            public void actionPerformed(ActionEvent e) {
    
                JFrame frame2 = new JFrame("New Project");
                frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    
                JPanel mainPanel = new JPanel();
    
                JButton buttonOK = new JButton("Ok");
                mainPanel.add(buttonOK);
    
                JButton buttonCn = new JButton("Cancel");
                buttonCn.addActionListener(new ButtonCNActionListener());
                mainPanel.add(buttonCn);
    
                frame2.add(mainPanel);
                frame2.pack();
                frame2.setLocationByPlatform(true);
                frame2.setVisible(true);
            }
    
            public class ButtonCNActionListener implements ActionListener {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            }
        }
    
    }