Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк JScrollPane или я что-то намудрил? 
V
    Опции темы
Killer_13
  Дата 15.7.2011, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Гляньте пож, что за глюк. Я закину весь код, но наверное его смотреть не оч обязательно. Смотреть функцию antwPanel().
Прикрепляю рисунок, чтоб было наглядней, что не в порядке.
И почему у меня появилось 2 полосы прокрутки? И почему они корректно не работают? Спасибо.
Код

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;

public class CopyOfV_TestWin extends JFrame {

    private JPanel window_panel = new JPanel();

    private JPanel left_panel = new JPanel();

    private JPanel content_panel = new JPanel();

    private final String autoren = "@autoren: ";

    private final String frageText = "\nDatenfelder, die mit dem Schlüsselwort static deklariert werden, heißen Klassenvariable. \n Sie existieren pro Klasse genau einmal (unabhängig von der Zahl der kreierten Instanzen) und alle Objekte dieser Klasse können auf sie zugreifen.\n"

            + "Ein Datenfeld, welches ohne das Schlüsselwort static deklariert wird, ist eine sogenannte Instanzvariable. Eine Instanzvariable \n existiert je Instanz (also je Objekt) genau einmal und kann entsprechend für jede Instanz einen anderen Wert\n annehmen. Eine Instanzvariable stellt sozusagen eine Eigenschaft eines Objektes dar.\n"

            + "Hinweis: Variablen, die innerhalb einer Methode deklariert werden, bezeichnet man als lokale Variablen.\n"

            + "Die Sichtbarkeit von (Instanz- und Klassen-) Variablen und Methoden wird mit Hilfe von Modifiern geregelt. \n Ist ein Element einer Klasse mit \n keinem der Schlüsselworte public, private oder protected deklariert, dann ist es nur innerhalb von Klassen desselben Pakets sichtbar.\n"

            + "Unter einem Paket versteht man alle Klassen, die in einem bestimmten Verzeichnis liegen. Sinnvollerweise werden \n logisch zueinander gehörige Klassen in ein Verzeichnis gepackt. Diese Verzeichnisse \nwerden wiederum logisch zusammengehörig in weitere Verzeichnisse geschachtelt, \n so dass eine ganze Verzeichnisstruktur entsteht. Nach Java-Konvention sollten die Verzeichnisse immer klein geschrieben sein.\n"

            + "Das Standardpaket besteht aus allen Klassen im aktuellen Arbeitsverzeichnis. Eigene Pakete können beispielsweise angelegt werden, indem man\n"

            + "package a.b.c;\n"

            + "am Anfang einer Klasse schreibt und diese Klasse auch in dem angegebenen Pfad a/b/c ablegt. Eine so definierte Klasse kann nach dem Übersetzen durch \n";

    public static void main(String[] args) {
        new CopyOfV_TestWin();

    }

    public CopyOfV_TestWin() {

        try {
            UIManager
                    .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        window();
    }

    private void window() {
        this.setPreferredSize(new Dimension(1024, 768));
        this.setMinimumSize(new Dimension(1024, 768));
        this.setLocation(200, 100);
        this.setContentPane(window_panel);
        this.setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        window_panel.setPreferredSize(new Dimension(1024, 722));
        window_panel.setMinimumSize(new Dimension(1024, 722));
        window_panel.setBorder(BorderFactory.createSoftBevelBorder(
                BevelBorder.RAISED, Color.gray, Color.black, Color.gray,
                Color.black));
        left_panel.setPreferredSize(new Dimension(124, 722));
        content_panel.setPreferredSize(new Dimension(874, 722));
        content_panel.setBorder(BorderFactory.createSoftBevelBorder(
                BevelBorder.LOWERED, Color.gray, Color.black, Color.gray,
                Color.black));
        content_panel.setLayout(new BoxLayout(content_panel, BoxLayout.Y_AXIS));
        window_panel.add(left_panel);
        window_panel.add(content_panel);
        leftPanel();
        contentPanel();

        setVisible(true);
    }

    private void leftPanel() {

        SpringLayout sl = new SpringLayout();
        JPanel time_panel = new JPanel();
        JPanel label_panel = new JPanel();
        JPanel frage_panel = new JPanel();
        JPanel scr_panel = new JPanel(new BorderLayout());
        JScrollPane scrPane = new JScrollPane(frage_panel);
        scrPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

        left_panel.setLayout(sl);

        time_panel.add(new JLabel("Zeit:"));
        time_panel.add(new JLabel("30:00"));
        time_panel.setPreferredSize(new Dimension(124, 25));
        time_panel.setBorder(BorderFactory.createSoftBevelBorder(
                BevelBorder.RAISED, Color.gray, Color.black, Color.gray,
                Color.black));

        label_panel.add(new JLabel("Fragen:"));
        label_panel.add(new JLabel("30"));
        label_panel.setPreferredSize(new Dimension(124, 25));
        label_panel.setBorder(BorderFactory.createSoftBevelBorder(
                BevelBorder.RAISED, Color.gray, Color.black, Color.gray,
                Color.black));

        scr_panel.setPreferredSize(new Dimension(124, 662));
        scr_panel.setMinimumSize(new Dimension(124, 662));
        scr_panel.setBorder(BorderFactory.createSoftBevelBorder(
                BevelBorder.RAISED, Color.gray, Color.black, Color.gray,
                Color.black));

        frage_panel.setLayout(new BoxLayout(frage_panel, BoxLayout.Y_AXIS));

        for (int i = 1; i <= 100; i++) {
            JLabel b = new JLabel("   " + i + " Frage");
            frage_panel.add(b);
        }

        scr_panel.add(scrPane);

        left_panel.add(time_panel);
        left_panel.add(label_panel);
        left_panel.add(scr_panel);

        sl.putConstraint(SpringLayout.NORTH, label_panel, 5,
                SpringLayout.SOUTH, time_panel);
        sl.putConstraint(SpringLayout.NORTH, scr_panel, 5, SpringLayout.SOUTH,
                label_panel);
    }

    private void contentPanel() {
        JPanel name_panel = new JPanel(new BorderLayout());
        JPanel frage_panel = new JPanel(new BorderLayout());
        JPanel antw_panel = new JPanel();
        JPanel naw_panel = new JPanel();
        JPanel autor_panel = new JPanel(new BorderLayout());

        name_panel.setPreferredSize(new Dimension(874, 25));
        frage_panel.setPreferredSize(new Dimension(874, 410));
        antw_panel.setPreferredSize(new Dimension(874, 200));
        antw_panel.setMinimumSize(new Dimension(874, 200));
        naw_panel.setPreferredSize(new Dimension(874, 50));
        naw_panel.setMinimumSize(new Dimension(874, 50));
        autor_panel.setPreferredSize(new Dimension(874, 15));

        content_panel.add(namePanel(name_panel));
        content_panel.add(fragePanel(frage_panel));
        content_panel.add(antwPanel(antw_panel));
        content_panel.add(nawPanel(naw_panel));
        content_panel.add(autorPanel(autor_panel));
    }

    private JPanel namePanel(JPanel name_panel) {

        JPanel t_name_panel = new JPanel();
        JPanel sp_name_panel = new JPanel();

        t_name_panel.setPreferredSize(new Dimension(437, 25));
        sp_name_panel.setPreferredSize(new Dimension(437, 25));

        JLabel t_name_lbl = new JLabel("  Test Name");
        JLabel sp_name_lbl = new JLabel("My Name  ");

        name_panel.add(t_name_panel.add(t_name_lbl), BorderLayout.WEST);
        name_panel.add(sp_name_panel.add(sp_name_lbl), BorderLayout.EAST);

        name_panel.setBorder(BorderFactory
                .createLineBorder(Color.gray, 1, true));

        return name_panel;
    }

    private JPanel fragePanel(JPanel frage_panel) {

        JTextArea fragetext = new JTextArea(frageText);
        fragetext.enable(false);
        frage_panel.setBorder(BorderFactory.createLineBorder(Color.gray, 1,
                true));

        frage_panel.add(fragetext);

        return frage_panel;
    }

    private JPanel antwPanel(JPanel antw_panel) {

        JPanel scr_panel = new JPanel(new BorderLayout());
        JScrollPane scrPane = new JScrollPane(antw_panel);
        ButtonGroup butt_group = new ButtonGroup();

        antw_panel.setLayout(new BoxLayout(antw_panel, BoxLayout.Y_AXIS));
        antw_panel.setBorder(BorderFactory
                .createLineBorder(Color.gray, 1, true));

        for (int i = 1; i <= 20; i++) {
            JRadioButton rb = new JRadioButton("   " + i
                    + " Antwortttttttttttttttttttttttttttt");
            antw_panel.add(rb);
            butt_group.add(rb);
        }
        scr_panel.add(scrPane);

        return scr_panel;
    }

    private JPanel nawPanel(JPanel naw_panel) {

        JButton prevO_btn = new JButton("prevO_btn");
        JButton prev_btn = new JButton("prev_btn");
        JButton next_btn = new JButton("next_btn");
        JButton nextO_btn = new JButton("nextO_btn");

        naw_panel.add(prevO_btn);
        naw_panel.add(prev_btn);
        naw_panel.add(next_btn);
        naw_panel.add(nextO_btn);

        naw_panel.setBorder(BorderFactory.createLineBorder(Color.gray, 1, true));

        return naw_panel;
    }

    private JPanel autorPanel(JPanel autor_panel) {

        JLabel label = new JLabel(autoren);
        autor_panel.add(label, BorderLayout.EAST);
        autor_panel.setBorder(BorderFactory.createLineBorder(Color.gray, 1,true));

        return autor_panel;
    }

}



И вопрос вдогонку, Как правильно сделать многострочное поле для вывода?!

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  Capture2.JPG 128,49 Kb
PM MAIL   Вверх
dorogoyIV
Дата 16.7.2011, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Killer_13 @  15.7.2011,  20:02 Найти цитируемый пост)
Как правильно сделать многострочное поле для вывода?!

JTextArea

какое то у тебя масло масляное:
Цитата

JPanel antw_panel = new JPanel();
content_panel.add(antwPanel(antw_panel));

private JPanel antwPanel(JPanel antw_panel) {
...


может проще так?
Код

 public Main()
 {
  setDefaultCloseOperation(3);
  setBounds(100, 100, 400, 300);
  setLayout(new FlowLayout());

  JPanel panel1 = createPanel(100, 100, new JComponent [] {new JCheckBox("1"),
                                                           new JCheckBox("2")},
                                       new FlowLayout());
  JPanel panel2 = createPanel(100, 100, new JComponent [] {new JCheckBox("1"),
                                                           new JCheckBox("2")},
                                       new GridLayout());
  add(panel1);
  add(panel2);
 }

 // общий метод создания панели с компонентами
 private JPanel createPanel(int w, int h, Component [] c, LayoutManager lm)
 {
  JPanel panel = new JPanel(lm);
  panel.setPreferredSize(new Dimension(w, h));
  panel.setLayout(lm);
  panel.setBorder(new BevelBorder(BevelBorder.RAISED));

  for(int i = 0; i < c.length; i++)
   panel.add(c [i]);

  return panel;
 }

PM MAIL   Вверх
Killer_13
Дата 16.7.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Ок, спасибо за подсказку, дальше буду так кодить, может переделаю свои готовые функции.
Дык а что на счет вопроса о панели с RadioButtons почему у меня JScrollPane ведет себя не так как нужно? :(

Добавлено через 7 минут и 13 секунд
На счет текста для вывода!
Я так и сделал 
Код

        JTextArea fragetext = new JTextArea(frageText);
        fragetext.enable(false);


но оно ж по умолчанию, поле для ввода. И ничего умнее не пришло в голову как выключить его. Так и делается? больше никакие альтернатив нету? А чтоб например его можно было выделять?
PM MAIL   Вверх
dorogoyIV
Дата 16.7.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Killer_13 @  16.7.2011,  10:07 Найти цитируемый пост)
но оно ж по умолчанию, поле для ввода. И ничего умнее не пришло в голову как выключить его. Так и делается? больше никакие альтернатив нету? А чтоб например его можно было выделять?

стандарного такого компонента кажется нету, но, всегда можно написать свой компонент...
насчет этого джава... - базара нет...
любой компонент, с любыми свойствами, можно свои события, свои экшены, ...
PM MAIL   Вверх
Killer_13
Дата 16.7.2011, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Нужно попробовать, только еще никогда не писал. smile
PM MAIL   Вверх
Connie
Дата 16.7.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Код

private JPanel fragePanel(JPanel frage_panel) {
        JTextArea fragetext = new JTextArea(frageText);
        fragetext.enable(false);
        frage_panel.setBorder(BorderFactory.createLineBorder(Color.gray, 1,
                true));
        frage_panel.add(fragetext);
        return frage_panel;
    }

А вот как у меня
Код

thanks = new JTextArea(5,20);
        thanks.setEditable(false);
        thanks.setLineWrap(true);
        thanks.setWrapStyleWord(true);
        scr = new JScrollPane(thanks);
//В этом случае текст переносится


Цитата

Дык а что на счет вопроса о панели с RadioButtons почему у меня JScrollPane ведет себя не так как нужно? :(

А как нужно?
Сначала она определяет размер верхнего поля, определяется он по размеру необходимому для размещения текста, потом туда добавляются радиокнопки 

Нужно TextArea сунуть в ScrollPane, радиокнопки положить на обычную панель.

Я код просматривать не буду, но опишу как я бы поступил
Время и кол-во вопросов на GridPane
Вопросы на панель, эту панель в ScrollPane.
Потом панель с BroderLayout. На север ложим уже созданную панель с гридом, в центр ScrollPane с вопросами. (левая панель готова L1)

Потом делаем центральную панель C1, на нее уложим SplitPane, с установленными минимальными размерами верхней и нижней панели. До того делаем панель со ScrollPane на котором лежит TextArea, это идет вверх SplitPane'а, вниз кладем панель с радиокнопками.

Создаем еще одну панель с BorderLayout в центр идет C1, на север панель с кнопками, на восток панель L1
PM MAIL WWW   Вверх
Killer_13
Дата 17.7.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Спасибо, буду переделывать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1102 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.