Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Элементы пользовательского интерфейса


Автор: vladt89 27.8.2008, 14:14
Добрый день всем.

Программа описывает просто некоторые элементы пользовательского интерфейса, но есть 2 проблемы:
1)При раскрытии окна до полных размеров экрана элементов становится ужасно много, на много больше чем я написал....
Почему?

2)137 строчка. Если  убрать коммент, то происходит мигание данного элемента слева вверху. 
Почему?
Извините за столь длинный код. Просто может где-то опечатка есть, а я не заметил....Правда. компилятор тоже...
Код

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.lang.*;

public class test
{
    public static void main(String[] args)
    {
        JFrame frame = new ImageViewerFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class ImageViewerFrame extends JFrame
{
    private JLabel label;
    private JFileChooser chooser;
    
    public ImageViewerFrame()
    {
        setTitle("MATH'S TEST");
        setSize(1000,900);
        
        label = new JLabel();
        add(label);

        chooser = new JFileChooser();
        chooser.setCurrentDirectory(new File("."));

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        setResizable(true);          //нельзя менять размеры окна
        setCursor(WAIT_CURSOR);    //тип курсора

        setLayout( new BorderLayout() );  //раскладка элементов  //if значение null, то все пропадает, почему?((
        
        JMenu menu = new JMenu("Файл");
        menuBar.add(menu);

        JMenu menu_2 = new JMenu("Правка");
        menuBar.add(menu_2);

        JMenuItem item_2 = new JMenuItem("zenit");
        menu_2.add(item_2);

        JMenuItem openItem = new JMenuItem("Open");
        menu.add(openItem);
        openItem.addActionListener
        (new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                int result = chooser.showOpenDialog(null);
                if(result == JFileChooser.APPROVE_OPTION)
                {
                    String name = chooser.getSelectedFile().getPath();
                    label.setIcon(new ImageIcon(name));
                }
            }
        });
        
        JMenuItem exitItem = new JMenuItem("Exit");
        menu.add(exitItem);
        exitItem.addActionListener
        (new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                System.exit(0);
            }
                });
                framePanel panel = new framePanel();
        add(panel); 
    }
}

class framePanel extends JPanel
{

     String str = "What's your name?";
     int answer = 0;
    int Result = 4444440;
    TextField fieldAnswer, fieldResult;
                                                  
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
         g.setColor(Color.white);
         g.drawString(str, 100, 250);
        g.drawString("answer = " + answer, 100, 200);
        makeButton("black font", Color.black);
                                          
        add(fieldAnswer = new TextField("answer", 40));
        JButton b = new JButton("проверить");
        add(b);
        b.addActionListener
        (new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                String label = event.getActionCommand();
                if (label.equals("проверить"))
                  {
                    //fieldResult = fieldAnswer.getText().trim();
                    fieldResult.setText(new Integer(Result).toString());    
                }
            }
        });
        add(fieldResult = new TextField("", 30));
        //fieldResult.setSize(20,20);

        Checkbox box_1 = new Checkbox("he-he)))))____true");
        box_1.setState(true);
        add(box_1);

        new Scrollbar(Scrollbar.VERTICAL);        

    //    setFont(Font.italic);   не работает
        Cursor curs = new Cursor(Cursor.HAND_CURSOR);
        Label label = new Label("Label", Label.CENTER);
        label.setCursor(curs);    //При наведении HAND_CURSOR
                setForeground(Color.GREEN);
        add(label);

        setForeground(Color.red);
    //    String word = "String word";
                                
        List list = new List();
        //list.setColor(Color.blue);
        list.addItem("First");
        list.addItem("Second");
        list.select(1);
    //    list.setSize(50,50);            //та жк фигня, что и с раскрывающимся списком
        add(list);
        

        List list2 = new List(3, true);        //true - можно выбирать несколько
        list2.addItem("First");  
        list2.addItem("Second");
        list2.addItem("Third");
        list2.addItem("Forth");
        list2.select(0);
    //    list2.setSize(50,50);
        add(list2);
        
        Scrollbar scroll_l = new Scrollbar();
        add(scroll_l);

        TextArea text = new TextArea("TextArea",10,10);
        text.setEditable(false);    //нельзя изменить текст
        add(text);
        }
    public void makeButton(String name, final Color backgroundColor)
    {
        JButton b = new JButton(name);
        add(b);
           b.addActionListener
        (new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                setBackground(backgroundColor);
            }
        });
    }
}                 


Попытки решения проблемы:
1)из знакомых(у кого спрашивал) никто не сталкивался с такими проблемами
2)книги не помогают, так как в них не пишут, либо пишут очень мало о решении таких проблем
3)по форумам смотрел, ничего подобного, к сожалению не нашел.

При компиляции ошибок программа не выдает.

Дайте совет либо ссылку где можно прочитать решение проблемы.

Автор: Kangaroo 27.8.2008, 14:26
Цитата(vladt89 @  27.8.2008,  14:14 Найти цитируемый пост)
137 строчка. Если  убрать коммент, то происходит мигание данного элемента слева вверху. 

Я должен высчитывать 137ю строчку? Оформи код нормально, сейчас у тебя закрывающий тег неправильный - нужно [/code]

Автор: AntonSaburov 27.8.2008, 17:02
1. Раз используется BorderLayout то все элементы по умолчанию кладутся в центр - почитай http://antonsaburov.narod.ru/articles/LayoutManager.html

2. Если ты используешь LayoutManager, то размеры впрямую установить нельзя - можно переопределять методы getPreferredSize(), getMaximumSize(), getMinimumSize(). И тогда сам лэйаут будет распределять элементы по своему алгоритму и возможным размерам компонентов.

Автор: dorogoyIV 28.8.2008, 12:06
нафига все компоненты в методе paintComponent  smile 

Автор: vladt89 31.8.2008, 22:04
а это плохо, что компоненты в методе paintComponent?

Автор: dorogoyIV 31.8.2008, 22:34
Цитата(vladt89 @  31.8.2008,  22:04 Найти цитируемый пост)
а это плохо, что компоненты в методе paintComponent?

плохо, вынеси их в другой метод или в конструктор.
и используй swing-компоненты, а не awt

Автор: cube 1.9.2008, 12:45
Цитата(dorogoyIV @ 31.8.2008,  22:34)
Цитата(vladt89 @  31.8.2008,  22:04 Найти цитируемый пост)
а это плохо, что компоненты в методе paintComponent?

плохо, вынеси их в другой метод или в конструктор.
и используй swing-компоненты, а не awt

Да, переходи на Swing и GridBagLayout )) 
Это примерно как после жигулей на митцубиси лансер))) правда начнуться новые проблемы..)) но если что помогут)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)