JTextArea位置,setBounds不起作用?

时间:2014-10-14 11:59:23

标签: java swing jtextfield jtextarea setbounds

我想在某个位置JTextArea。我尝试了几件事情,例如使用不同的LayoutManager,根本没有LayoutManagersetLayout(null)等等。无论我做什么,看起来像setBounds()setLocation()和{ {1}}没有在这里工作,但我读到了它,并说它应该有效。那么我做错了什么?

setSize()总是太高,如果我更改JTextArea中的参数,位置就不会改变。

setBounds()

以下是我想要的样子: enter image description here

以下是目前的情况: enter image description here

我做了一些教程,他们使用了添加到public class textarea extends JPanel { public static void main(String[] args){ JFrame frame = new JFrame("text area"); textarea content = new textarea(); frame.setContentPane(content); frame.setLocation(120,70); frame.pack(); frame.setVisible(true); frame.setSize(700,500); } JPanel PanelForText; public textarea(){ setBackground(Color.LIGHT_GRAY); setLayout(new FlowLayout(FlowLayout.CENTER,50,50)); txtArea txt = new txtArea(); PanelForText = new JPanel(); PanelForText.setPreferredSize(new Dimension(500,300)); PanelForText.setBorder(BorderFactory.createEtchedBorder()); PanelForText.add(txt); add(PanelForText); } } public class txtArea extends JPanel { boolean textAreaCreated = false; public txtArea(){ setBackground(Color.WHITE); setPreferredSize(new Dimension(496, 290)); } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.GRAY); g.fillRect(50, 25, 400, 245); if (!textAreaCreated) createTextArea(); } public void createTextArea() { JTextArea Text = new JTextArea(); Text.setBounds(500,300,300,300); Text.setOpaque(false); Text.setWrapStyleWord(true); Text.setLineWrap(true); Text.setBorder(BorderFactory.createLineBorder(Color.RED)); add(Text); textAreaCreated = true; } } 的{​​{1}},但我想知道我是否可以使用JTextFieldJPanel更多文字没有先将它添加到Panel!

就像我说的那样,我正在查找"如何设置JTextField位置"它说使用JTextArea。显然这不正确..所以我想知道的是如何更好地做到这一点。另外:我确实阅读了很多关于JTextArea的内容,但对我而言,尝试使用它比阅读它更有帮助...

我尝试使用行和列,但它没有改变setBounds()不在正确位置的事实。

我所做的是(在CreateTextArea方法中):

LayoutManager

1 个答案:

答案 0 :(得分:2)

你可以通过这样做来实现你的中心嵌套外观,使用GridBagLayout来嵌套你的组件。您可以使用EmptyBorder来实现某些框架JPanel的宽度。您应该从不在paintComponent方法中添加组件。

例如:

import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;

@SuppressWarnings("serial")
public class TestTextArea2 extends JPanel {

   private static final Color BG = Color.LIGHT_GRAY;
   private static final int ROWS = 14;
   private static final int COLS = 34;
   private JTextArea textArea = new JTextArea(ROWS, COLS);

   public TestTextArea2(int heightGap, int sideGap) {
      setBorder(BorderFactory.createEmptyBorder(heightGap, sideGap, heightGap, sideGap));

      textArea.setBackground(Color.LIGHT_GRAY);
      JScrollPane scrollPane = new JScrollPane(textArea);

      JPanel txtAreaPanel = new JPanel(); 
      int ebGap = 40;
      txtAreaPanel.setBackground(Color.white);
      txtAreaPanel.setBorder(BorderFactory.createEmptyBorder(ebGap, ebGap, ebGap, ebGap));
      txtAreaPanel.setLayout(new GridBagLayout());
      txtAreaPanel.add(scrollPane);

      JPanel myPanel2 = new JPanel();
      Border outerBorder = BorderFactory.createEtchedBorder();
      int heightGap2 = 5;
      int sideGap2 = 5;
      Border innerBorder = BorderFactory.createEmptyBorder(heightGap2, sideGap2, heightGap2, sideGap2);
      myPanel2.setBorder(BorderFactory.createCompoundBorder(outerBorder, innerBorder));

      myPanel2.setLayout(new GridBagLayout());
      myPanel2.add(txtAreaPanel);

      setBackground(BG);
      setLayout(new GridBagLayout());
      add(myPanel2);
   }


   private static void createAndShowGui() {
      JFrame frame = new JFrame("TestTextArea2");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(new TestTextArea2(100, 100));
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

请注意,不是setSize(...)setPreferredSize(...)