Невозможно установить границы в java JFrame [duplicate]

AngularJS

Хорошо, если вы используете угловой, вы тоже можете это сделать

var newObject = angular.copy(oldObject);
0
задан Salehest6990 5 March 2015 в 01:10
поделиться

3 ответа

Для достижения ваших целей используйте соответствующие менеджеры макетов ...

Layout [/g1]

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class DetectMotion extends JFrame {

    private JLabel label = null;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                DetectMotion frame = new DetectMotion();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public DetectMotion() {

        JPanel pnlButton = new JPanel();
        label = new JLabel("nothing");
        JButton btn = new JButton("Close");

        pnlButton.setLayout(new GridBagLayout());

        setTitle("Motion Detector");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand().equals("Close")) {
                    //TO-DO
                }
            }
        });

        JPanel panel = new JPanel() {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }

        };
        panel.setBackground(Color.RED);

        add(panel);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.weighty = 1;

        pnlButton.add(label, gbc);

        gbc.weighty = 0;
        pnlButton.add(btn, gbc);
        add(pnlButton, BorderLayout.EAST);

        pack();
        setVisible(true);
    }

}

Layout [/g2]

package javaapplication647;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class DetectMotion extends JFrame {

    private JLabel label = null;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                DetectMotion frame = new DetectMotion();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public DetectMotion() {

        JPanel pnlButton = new JPanel();
        label = new JLabel("nothing");
        JButton btn = new JButton("Close");

        pnlButton.setLayout(new FlowLayout(FlowLayout.RIGHT));

        setTitle("Motion Detector");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (e.getActionCommand().equals("Close")) {
                    //TO-DO
                }
            }
        });

        JPanel panel = new JPanel() {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }

        };
        panel.setBackground(Color.RED);

        add(panel);
        pnlButton.add(label);
        pnlButton.add(btn);
        add(pnlButton, BorderLayout.SOUTH);

        pack();
        setVisible(true);
    }

}

Взгляните на Выравнивание компонентов внутри контейнера для большего количества идей

2
ответ дан MadProgrammer 21 August 2018 в 04:43
поделиться

Если вы хотите поместить элемент в определенную координату, вы должны использовать нуль Макет:

Пример:

public void newClass(){

  public newClass(){

    JPanel panel = new JPanel();
    JButton button = new JButton("button1");


   panel.setLayout(null);
   button.setBounds(x,y,X,Y);
   panel.add(button);
}

public static void main(String[] args){
      newClass();
 }

}

Выполнение без Менеджера макета (Абсолютный Позиционирование)

-1
ответ дан crAlexander 21 August 2018 в 04:43
поделиться
  • 1
    Избегайте использования макетов null, идеальные макеты пикселей являются иллюзией в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше и больше времени на исправление – MadProgrammer 5 March 2015 в 01:29
  • 2
    @MadProgrammer Вы имеете в виду, что у меня проблемы, например, если я создаю приложение для планшета и то же самое для ПК? Это другое, что нулевой макет не так хорош, но снова он может работать с некоторым дополнительным кодом ... – crAlexander 5 March 2015 в 01:34
  • 3
    Каждый раз, когда вы запускаете свой код в другой системе (даже с той же ОС), существуют различия в том, как можно выводить вывод из-за различий в жестких, программных, шрифтовых, настройках. Менеджер компоновки автоматически обрабатывает большинство этих проблем. Требования к компоновке планшета и ПК - это мир друг от друга, и я бы не пытался создавать единый вид для обоих, но это другая проблема ... Если вы кодируете Android или iOS, вы обнаружите, что у них также есть собственный макет менеджерам для устранения несоответствий между аппаратными средствами ... – MadProgrammer 5 March 2015 в 01:45

Лучше всего использовать графический редактор Java Drag-and-Drop, такой как NetBeans . В частности, если вы заинтересованы в очень специфическом позиционировании, ничто не сравнится с создателем GUI.

-1
ответ дан jdb1015 21 August 2018 в 04:43
поделиться
  • 1
    «Лучшее ваше предложение» - Это очень субъективно, лично, лучше всего понять, как использовать доступные менеджеры макетов, чтобы получить полную мощность, прежде чем полагаться на другие инструменты, которые обычно просто прикручивают, если вы не понимаете, как API работает на самом деле ... – MadProgrammer 5 March 2015 в 01:46
Другие вопросы по тегам:

Похожие вопросы: