2014-12-23 2 views
0
public MainFrame() { 
    JFrame frame = new JFrame("BoolPegia"); 
    frame.setTitle("Background Color for JFrame"); 
    frame.setSize(400,400); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.setLayout(new BorderLayout()); 
    JLabel background=new JLabel(new ImageIcon("F:\\photosForJava\\unnamed.png")); 
    frame.add(background); 
    background.setLayout(new FlowLayout()); 
    JButton startPlay=new JButton("Start play!"); 
    startPlay.addActionListener(this); 
    startPlay.setBounds(100, 50, 100,50); //here I am trying something, not working 
    background.add(startPlay); 
    frame.setSize(399,399); 
    frame.setSize(400,400); 
} 

Я пытаюсь определить координаты моей кнопки startPlay .. это просто не работает. help?Как определить координаты JButton в java

+0

Местоположение (и размер) кнопки определяется менеджером компоновки, когда контейнер проверяется (и выкладывается). Что вы пытаетесь достичь? – MadProgrammer

+0

Я видел, что вы предложили добавить background.setLayout (null); , Насколько я знаю, по умолчанию JLabel использует пустой макет, поэтому нам не нужно устанавливать его на нуль. –

ответ

0

Вам не нужно устанавливать рамочную структуру, установите для макета метки значение null, удалив эту строку.

background.setLayout(new FlowLayout()); 

Если вы хотите знать местоположение кнопки, вы можете сделать это uisng GetX() и GetY()

System.out.println(startPlay.getX() + ", " + startPlay.getY()); 
+0

Серьезно, как это ничем не отличается от уже начатого – MadProgrammer

0

Чтобы разместить элементы управления на раме в соответствии с вашими координатами, вам необходимо установить макет кадра на null. Заменить следующие строки:

frame.setLayout(new BorderLayout()); 

к следующему и попробуйте еще раз

frame.setLayout(null); 

Note: Теперь вам потребуется, чтобы дать координаты для каждого из элементов управления.

+0

Избегайте использования макетов «null», идеальные макеты пикселей - это иллюзия в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление. – MadProgrammer

+0

Но все же можно управлять. –

+0

Если вы не любите себя и как повторяющуюся работу, которая уже была выполнена (через многочисленных менеджеров макетов), и любовь разрывает ваши волосы, потому что она выглядит просто на вашем компьютере, конечно ... – MadProgrammer

0

Try это, Он изменит размер вашей кнопки, но не его координаты, Как координаты задаются LayoutManager т.е. FlowLayout() фона.

startPlay.setPreferredSize(new Dimension(50,30)); 

Extra: Layout рекомендуется, потому что, когда кадр повторно размера LayoutManager скорректирует компоненты соответственно. Если вы делаете setLayout(null), вы говорите, что пользователь не должен менять размер рамки для этого setResizable(false) невосприимчивого пользовательского интерфейса. В моей точке зрения это предпочтительнее только для малого и статического кадров.

0

Если это только позиция Кнопка, которую вам нужно, вы можете получить с помощью методов getLocation() и getLocationOnScreen() JButton (из суперкласса Component).

Если вы хотите самостоятельно разместить свою кнопку, вы должны установить диспетчер компоновки нулевым и установить расположение ваших компонентов на setLocation (Point), но это плохая практика.

Смежные вопросы