2015-10-23 4 views
1

В моем коде я есть:Как нарисовать белый прямоугольник внизу JComponent?

графический интерфейс с JScrolledPane, содержащий вставку, которая содержит некоторые JPanel (они могут быть рефакторинг, как JComponent в случае необходимости).

См Изображение 1:

example

Я пытаюсь:

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

Я попытался использовать Box.createVerticalStruct, но это усложняет управление. Я не хочу добавлять новую белую панель к моему объекту, представляющую цветную панель, так что я искал ее, и мне кажется, что есть и другие 2 способа: использование вставки или переопределение метода рисования.

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

Окончательные результаты должны быть что-то вроде этого:

enter image description here

Вот код, вы можете использовать, чтобы сделать некоторые попробовать (что было написано на цели, так что не слишком много заботы о хорошие методы письма):

public class TheMotherPuckerGlue2 { 

    public static void main(String [] a) { 
     final JFrame frame = new JFrame(); 
     frame.setSize(500, 500); 
     frame.setTitle("myCode"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new BorderLayout()); 

     JScrollPane myPane = new JScrollPane(); 
     myPane.setPreferredSize(new Dimension(350,200)); 
     myPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     JPanel viewPort = new JPanel(new BorderLayout()); 
     viewPort.setBackground(Color.WHITE); 

     Box myBox = Box.createVerticalBox(); 
     myBox.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); 

     viewPort.add(myBox,BorderLayout.PAGE_START); 

     class ColoredPanel extends JPanel{ 
      public ColoredPanel(Color aColor){ 
       super.setBackground(aColor); 
       super.setPreferredSize(new Dimension(100,60)); 
      } 

     } 

     ColoredPanel panel1 = new ColoredPanel(Color.green); 
     ColoredPanel panel2 = new ColoredPanel(Color.yellow); 
     ColoredPanel panel3 = new ColoredPanel(Color.red); 

     myBox.add(panel1); 
     myBox.add(panel2); 
     myBox.add(panel3); 

     viewPort.add(myBox,BorderLayout.PAGE_START); 


     myPane.setViewportView(viewPort); 

     frame.add(myPane); 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

Благодарности

+1

* "найти лучший способ для объявления d пробел между ними. Я пробовал использовать «Box.createVerticalStruct», но это усложняет управление. "* Используйте один столбец' GridLayout' с ** layout padding ** (посмотрите на его конструкторы). Установите цвет BG панели 'GridLayout' на' WHITE'. –

+0

Я не упоминал, что цветные панели показанный может содержать компоненты. Как вы думаете, он может быть другим? Тем временем я проверяю Java-учебник GridLayout – Koop4

ответ

0

Я нашел отличный способ сделать это путем перезаписи paintComponent ТНА т способ:

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    drawWhiteSpace(g); 
    drawBorder(g); 
} 

метод drawWhiteSpace будет нарисовать белый прямоугольник которые начинаются в нижнем левом углу -6 пикселя, и перейти к нижнему rightcorner

private void drawWhiteSpace(Graphics g) { 
    int x1 = 0; 
    int y1 = this.getSize().height-6; 
    int x2 = this.getSize().width; 
    int y2 = this.getSize().height; 
    g.setColor(Color.WHITE); 
    g.fillRect(x1, y1, x2, y2);  
} 

Однако граница была не в порядке, поэтому я должен был удалить его и сделать его себя, рисуя его из верхнего левого угла в верхний правый угол белого пространства

private void drawBorder(Graphics g) { 
    int x1 = 0; 
    int y1 = 0; 
    int x2 = this.getSize().width-1; 
    int y2 = this.getSize().height-6; 
    g.setColor(Color.GRAY); 
    g.drawRect(x1, y1, x2, y2); 
} 
+1

Нет необходимости в пользовательской росписи. Не изобретайте велосипед. Просто используйте Swing Border. Прочтите раздел из учебника Swing [How to Use Borders] (http://docs.oracle.com/javase/tutorial/uiswing/components/border.html). Для рабочих примеров. – camickr

+0

Прочтите. Границы не полезны. Если вы обнаружите, что они могут работать, у меня будет приятно читать ваш код. – Koop4

+0

Конечно Границы полезны. Вы пытаетесь нарисовать свою собственную границу. Как я уже сказал, не изобретайте велосипед. Просто добавьте Border в ColoredPanel. На самом деле я буду рад прочитать ваши код, который показал, что вы пытались. Я дал вам ссылку на учебник.Объясните, почему это не работает? – camickr

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